<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
<head>
<meta name="robot" content="index,follow">
<title>Module hcn - Hash Table Cell Node - Forth Foundation Library</title>
</head>
<body>
<h2>hcn - Hash Table Cell Node</h2>
<h3>Module Description</h3>
<p>The hcn module implements a node that stores cell wide data in a hash table.
</p>
<h3>Module Words</h3>
<dl>
</dl>
<h4>Hash table node structure</h4>
<dl>
<dt><a name="word1"><b>hcn%</b>	( - n )</dt>
<dd>Get the required space for a hcn node</dd>
</dl>
<h4>Node creation, initialisation and destruction</h4>
<dl>
<dt><a name="word2"><b>hcn-init</b>	( x c-addr u u2 hcn -- )</dt>
<dd>Initialise the node with the hash u2, the key c-addr u and cell data x</dd>
<dt><a name="word3"><b>hcn-(free)</b>	( hcn -- )</dt>
<dd>Free the key from the heap</dd>
<dt><a name="word4"><b>hcn-new</b>	( x c-addr u u2 -- hcn )</dt>
<dd>Create a new node on the heap with the hash u2, the key c-addr u and cell data x</dd>
<dt><a name="word5"><b>hcn-free</b>	( hcn -- )</dt>
<dd>Free the node from the heap</dd>
</dl>
<h4>Inspection</h4>
<dl>
<dt><a name="word6"><b>hcn-dump</b>	( hcn -- )</dt>
<dd>Dump the node</dd>
</dl>
<h3>Examples</h3>
<pre>
include ffl/hct.fs
include ffl/hci.fs

\ Example: store mountain heights in a hash table


\ Create the hash table in the dictionary with an initial size of 10

10 hct-create height-table


\ Add the mountains (in meters)

8300 s" mount everest" height-table hct-insert
4819 s" mont blanc"    height-table hct-insert
5642 s" mount elbrus"  height-table hct-insert

\ Get a mountain height

s" mount everest" height-table hct-get [IF]
  .( Mount everest: ) . cr
[ELSE]
  .( Unknown mountain) cr
[THEN]

s" vaalserberg" height-table hct-get [IF]
  .( Vaalserberg: ) . cr
[ELSE]
  .( Unknown mountain) cr
[THEN]


\ Word for printing the mountain height

: height-emit ( n c-addr u -- = height key )
  type ."  -&gt; " . cr
;


\ Print all mountain heights

' height-emit height-table hct-execute            \ Execute the word height-emit for all entries in the hash table



\ Example hash table iterator

\ Create the hash table iterator in the dictionary

height-table hci-create height-iter               \ Create an iterator named height-iter on the height-table hash table

\ Moving the iterator

height-iter hci-first                         \ Move the iterator to the first record
[IF]                                          \ If record exists Then ..
  height-iter hci-key type                    \   Type the key ..
  .(  =&gt; )
  .                                           \   .. and the value
  cr
[THEN]

8300 height-iter hci-move                     \ Move the iterator to the mountain with a height of 8300
[IF]                                          \ If mountain exists Then ..
  height-iter hci-key type                    \   Type the name ..
  .(  =&gt; )
  height-iter hci-get drop .                  \   .. and the height
  cr
[ELSE]
  .( No mountain found with a height of 8300) cr  
[THEN]
</pre>
<hr>
<div align="center">generated 24-Jul-2010 by <b>ofcfrth-0.10.0</b></div>
</body>
</html>
